import logging
import random
import winsound

logger = logging.getLogger(__name__)

class TradeSimulator:
    def __init__(self, db_manager):
        self.db_manager = db_manager
        logger.info("交易模拟器初始化完成")
    
    def simulate_trade(self, trade):
        """模拟交易"""
        try:
            logger.info(f"开始模拟交易: {trade['StockName']}({trade['StockCode']}) {trade['TradeType']}")
            
            # 获取当前资金
            current_capital = self.db_manager.get_current_capital()
            logger.debug(f"当前资金: {current_capital:.2f}")


            # 计算交易金额 (使用固定比例的资金)
            trade_amount = current_capital * 0.1  # 使用10%的资金
            logger.debug(f"交易金额: {trade_amount:.2f}")
            
            # 计算交易数量
            trade_price = trade['TradePrice']
            trade_volume = int(trade_amount / trade_price)
            logger.debug(f"交易数量: {trade_volume}")

            # 计算交易成本
            trade_cost = trade_price * trade_volume
            # 获取系统设置
            SettingYj = self.db_manager.get_system_setting('SettingYj') * trade_cost # 手续费比例
            SettingYhs = self.db_manager.get_system_setting('SettingYhs') * trade_cost  # 印花税比例
            logger.debug(f"交易成本: {trade_cost:.2f}")
            
            # 更新资金
            if trade['TradeType'] in ['买入', '买']:
                new_capital = current_capital - int(trade_cost)- int(SettingYj)
                logger.debug(f"买入后资金: {new_capital:.2f}")
            else:  # 卖出
                new_capital = current_capital + int(trade_cost)- int(SettingYhs)-int(SettingYj)
                logger.debug(f"卖出后资金: {new_capital:.2f}")
            
            # 更新数据库中的资金
            self.db_manager.update_capital(new_capital)
            logger.info(f"资金已更新: {new_capital:.2f}")
            
            # 计算盈亏（简化实现）
            profit_loss = 0  # 初始盈亏为0，实际盈亏后续计算
            
            # 确定交易结果
            sim_result = "成功"
            
            # 返回模拟结果
            result = {
                'SimPrice': trade_price,
                'SimVolume': trade_volume,
                'SimResult': sim_result,
                'ProfitLoss': profit_loss,
                'Profitsyje': new_capital
            }
            
            logger.info(f"模拟交易完成: {result}")
            return result
        except Exception as e:
            logger.error(f"模拟交易失败: {str(e)}")
            # 返回错误结果
            return {
                'SimPrice': 0,
                'SimVolume': 0,
                'SimResult': "失败",
                'ProfitLoss': 0,
                'Profitsyje': current_capital
            }